// 以下是Go语言注释的中文翻译：
// 
// ```
// 版权所有 magesfc bright.ma
//
// 根据 Apache 许可证，版本 2.0（“许可证”）授权；
// 除非遵守许可证，否则您不能使用此文件。
// 您可以在以下网址获取许可证的副本：
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// 除非适用法律要求或书面同意，否则根据许可证分发的软件
// 按“原样”分发，不附带任何明示或暗示的保证或条件。
// 有关特定语言管理权限和限制的信息，请参阅许可证。
// ``` 
// 
// 请注意，这种翻译保持了原文的结构和格式。
// md5:40dea2628d59d63b

package gitee

import (
	"context"
	"fmt"
)

type Hook struct {
	ID                  *int64     `json:"id,omitempty"`
	URL                 *string    `json:"url,omitempty"`
	CreatedAt           *Timestamp `json:"created_at,omitempty"`
	Password            *string    `json:"password,omitempty"`
	ProjectID           *int64     `json:"project_id,omitempty"`
	Result              *string    `json:"result,omitempty"`
	ResultCode          *int       `json:"result_code,omitempty"`
	PushEvents          *bool      `json:"push_events,omitempty"`
	TagPushEvents       *bool      `json:"tag_push_events,omitempty"`
	IssuesEvents        *bool      `json:"issues_events,omitempty"`
	NoteEvents          *bool      `json:"note_events,omitempty"`
	MergeRequestsEvents *bool      `json:"merge_requests_events,omitempty"`
}

func (h Hook) String() string {
	return Stringify(h)
}

// ListHooks 列出指定仓库的所有 Hook。
// md5:83ee3296f9e1609f
func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Hook, *Response, error) {
	u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
	u, err := addOptions(u, opts)
	if err != nil {
		return nil, nil, err
	}

	req, err := s.client.NewRequest("GET", u, nil)
	if err != nil {
		return nil, nil, err
	}

	var hooks []*Hook
	resp, err := s.client.Do(ctx, req, &hooks)
	if err != nil {
		return nil, resp, err
	}

	return hooks, resp, nil
}
